/*
package com.hyf.serviceedu.controller.minute;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hyf.commonutils.fruit;
import com.hyf.serviceedu.entity.EduTeacher;
import com.hyf.serviceedu.entity.condition.TeacherQuery;
import com.hyf.serviceedu.service.EduTeacherService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import java.util.List;

*/
/**
 * <p>
 * 讲师 前端控制器
 * </p>
 *
 * @author atguigu
 * @since 2021-04-17
 *//*

@Api(description="讲师管理")
@CrossOrigin //跨域
@RestController
@RequestMapping("/serviceedu/eduteacher")// 没有使用 Api 所访问的路径 // 全部的访问地址 http://localhost:8001/serviceedu/teacher/GetAlllist
public class EduTeacherController {


    @Autowired// 倒入 mapper 接口
    private EduTeacherService teacherService; // 教师表的 mapper 接口


*/
/* 先前写的 讲师列表
// 查询讲师表中的所有数据
    // rest 风格   GetMapping 的作用是通过 rest风格的提交方式来的
    @ApiOperation(value = "所有讲师列表")
    @GetMapping("GetAlllist")
    public fruit GetAlllist() {
        List<EduTeacher> teachers = service.list(null);
        return fruit.ok().data("items", teachers);
    }*//*



    // 1.查询讲师表中的所有数据
    // rest 风格   GetMapping 的作用是通过 rest风格的提交方式来的
    @ApiOperation(value = "所有讲师列表")
   // 把service 注入进来
    @Autowired // 通过Autowred注入进来
    @GetMapping("teacherList")
    public fruit teacherList(){
        List<EduTeacher> list = teacherService.list(null);
        return fruit.ok().data("items", list);
    }


  */
/*
  	@pathVariable和RequestParam的区别：顾名思义，前者是从路径中获取变量，也就是把路径当做变量，后者是从请求里面获取参数
  从你的请求来看：
  /Springmvc/user/page.do?pageSize=3&pageNow=2
  pageSize和pageNow应该是属于参数而不是路径，所以应该添加@RequestParam的注解。
  如果做成如下URL，则可以使用@PathVariable
  someUrl/{paramId}
  这里的paramId是路径中的变量，应使用@pathVariable
  1、 @PathVariable
  当使用@RequestMapping URI template 样式映射时， 即 someUrl/{paramId}, 这时的paramId可通过 @Pathvariable注解绑定它传过来的值到方法的参数上。
  @RequestParam
  A） 常用来处理简单类型的绑定，通过Request.getParameter() 获取的String可直接转换为简单类型的情况（ String--> 简单类型的转换操作由ConversionService配置的转换器来完成）；因为使用request.getParameter()方式获取参数，所以可以处理get 方式中queryString的值，也可以处理post方式中 body data的值；
  B）用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容，提交方式GET、POST；
  C) 该注解有两个属性： value、required； value用来指定要传入值的id名称，required用来指示参数是否必须绑定；
  	 *//*



// 讲师的逻辑删除 使用逻辑删除的时候在实体类中添加一个逻辑删除的注解 @TableLogic  并在配置类中添加配置
    // 逻辑删除中 使用rest 提交的方式应该用注解 @DeleteMapper 的方式提交

  */
/*
  	@pathVariable和RequestParam的区别：顾名思义，前者是从路径中获取变量，也就是把路径当做变量，后者是从请求里面获取参数
  从你的请求来看：
  /Springmvc/user/page.do?pageSize=3&pageNow=2
  pageSize和pageNow应该是属于参数而不是路径，所以应该添加@RequestParam的注解。
  如果做成如下URL，则可以使用@PathVariable
  someUrl/{paramId}
  这里的paramId是路径中的变量，应使用@pathVariable
  1、 @PathVariable
  当使用@RequestMapping URI template 样式映射时， 即 someUrl/{paramId}, 这时的paramId可通过 @Pathvariable注解绑定它传过来的值到方法的参数上。
  @RequestParam
  A） 常用来处理简单类型的绑定，通过Request.getParameter() 获取的String可直接转换为简单类型的情况（ String--> 简单类型的转换操作由ConversionService配置的转换器来完成）；因为使用request.getParameter()方式获取参数，所以可以处理get 方式中queryString的值，也可以处理post方式中 body data的值；
  B）用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容，提交方式GET、POST；
  C) 该注解有两个属性： value、required； value用来指定要传入值的id名称，required用来指示参数是否必须绑定；
  	 *//*


*/
/*
先前的写法及理解
    @ApiOperation(value = "根据id进行逻辑删除")
    @DeleteMapping("{id}")// 思考 使用这种方法怎么测试
    // swagger 测试
    // @ApiParam(name = "类型", value = "所显示的类型", required = true)
    public fruit deleteAlllist( @ApiParam(name = "id", value = "讲师ID", required = true) @PathVariable String id) {
        //   @PathVariable 是从路径中获取变量，也就是把路径当做变量
        // @RequestParam  是从请求里面获取参数 从你的请求来看：/Springmvc/user/page.do?pageSize=3&pageNow=2 pageSize和pageNow应该是属于参数而不是路径
        // 通过 id 的值进行删除
        boolean b = service.removeById(id);// 根据id 主键删除
        if (b) {
            return fruit.ok();// 成功返回ok
        }else {

            return fruit.error();//
        }
*//*




//2. 讲师的逻辑删除功能
    @ApiOperation(value = "讲师的逻辑删除功能")
    @DeleteMapping("{id}")// id 值需要通过路径传递
    public fruit teacherdelete(@ApiParam(name = "id", value = "讲师ID", required = true) @PathVariable String id){// @PathVariable 这个注解就是得到路径中的id
        boolean b = teacherService.removeById(id);// 根据id 主键删除
        if(b){
            return fruit.ok();//删除成功返回一个成功
        }else {
            return fruit.error();// 删除失败返回一个失败
        }

    }

*/
/* 上次写的分页查询的方法
    // 分页查询的方法
    // current 代表当前页
    // limit 代表显示的页数
    @ApiOperation(value = "分页查询")// 给swaager 一个提示的方法
    @GetMapping("pageTeacher/{current}/{limit}")
    public fruit pageTeachers(
            @ApiParam(name = "current", value = "当前页数", required = true)
            @PathVariable long current,
            @ApiParam(name = "limit", value = "每页记录数", required = true)  @PathVariable long limit ){
// 创建 page对象
        Page<EduTeacher> pageteacher = new Page<>(current,limit);// 这个意思是当前的页数显示多少条数据 1 就是页数，后面的三就是条数

// 通过try catch 捕获抛出异常

  *//*
*/
/*  try {
      int a = 10/0;
    }catch (Exception e) {
  // 执行自定义异常
      throw new GuliException(20001,"执行了自定义异常处理");
    }
*//*
*/
/*
// 调用一个方法实现分页
        // 调用方法的时候，底层封装，把分页所有数据封装到 page 中
        service.page(pageteacher,null);

        long total = pageteacher.getTotal();// 返回总记录数
        List<EduTeacher> records=pageteacher.getRecords();// 数据list集合


  *//*
*/
/*  // 第二种方式 先通过map 集合将它包括起来
     Map map=new HashMap();
     map.put("total",total);// 包括 返回的总记录数
     map.put("rows",records);// 包括 数据 list 的集合
     return fruit.ok().data(map);// 然后统一返回出来*//*
*/
/*

        return fruit.ok().data("total",total).data("rows",records);// 第一种书写的方式
    }*//*


    //3. 讲师的分页查询讲师功能

    @ApiOperation(value = "分页讲师列表")
    @GetMapping("pageTeacher/{current}/{limit}")
    public fruit pagelistlimitteacher(
            @ApiParam(name = "page", value = "当前页码", required = true)
            @PathVariable long current,// 当前页
            @ApiParam(name = "limit", value = "每页记录数", required = true)
            @PathVariable long limit // 每页的记录数
            ){
        // 创建 page 对象
        Page<EduTeacher> page=new Page<>(current,limit);
        // 调用方法实现分页
        // 调用方法的时候会进行一个封装
        teacherService.page(page,null);
        // 总记录数
        long total= page.getTotal();
        // 数据list 集合
        List<EduTeacher> records=page.getRecords();
 //int i=10/0; //异常处理

//        try {// 手动抛出制定一异常
//            int a = 10/0;
//        }catch(Exception e) {
//            throw new GuliException(20001,"出现自定义异常");
//        }

        // 创建map 集合来储存数据 第二种方法
//        Map map=new HashMap();
//
//        map.put("total",total);
//        map.put("rows",records);
//
//        return fruit.ok().data(map);
        return fruit.ok().data("total",total).data("rows",records);
    }

// 4. 条件分页查询
*/
/*//*
/ 条件分页查询 先前的写法

    // 条件分页查询
    @ApiOperation(value = "分页讲师列表")
    @PostMapping("pageTeacherCondition/{current}/{limit}")// @RequestBody 使用的提交房时就是post方式，所以提交方式就有原本的 @GetMapper 就改为 @PostMapper的方式进行提交
    public fruit pageTeacherCondition(                       // 不然的话，它拿不到里面的值
                                                             @ApiParam(name = "current", value = "当前页码", required = true)
                                                             @PathVariable long current,
                                                             @ApiParam(name = "limit", value = "每页记录数", required = true) @PathVariable long limit,
                                                             @ApiParam(name = "teachercondition", value = "查询对象", required = false)
                                                             @RequestBody(required = false)  TeacherQuery teachercondition){
//  @RequestBody(required = false)  Teachercondition teachercondition 表示Teachercondition 这个值可以没有



        //  @RequestBody 的作用：使用json传递数据，把json数据封装到对应对象里面  以post方式提交
        // @ResponseBody  :返回数据，返回json数据  他们两个大多数使用 requestBody 进行提交


        // 创建一个page 对象
        Page<EduTeacher> pageteacheer=new Page<>(current, limit);// 里面添加显示的页数和条数

        //构建条件  wrapper
        QueryWrapper<EduTeacher> wrapper=new QueryWrapper<>();

        //多条件组合插查询
        String name = teachercondition.getName();// 讲师名称
        Integer level = teachercondition.getLevel();// 讲师头衔
        String begin = teachercondition.getBegin();// 开始时间
        String end = teachercondition.getEnd();// 结束时间
// 通过if 判断条件是否为空， 如果不为空拼接条件
        // 讲师名称
        if(!StringUtils.isEmpty(name)){
            // 构建条件
            wrapper.like("name",name);// 字段名称 条件查询
        }

        // 讲师头衔
        if (!StringUtils.isEmpty(level)) {
            // 构建条件
            wrapper.eq("level",level);
        }

        // 开始时间
        if (!StringUtils.isEmpty(begin)) {
            wrapper.ge("gmt_create",begin);
        }

        // 结束时间
        if (!StringUtils.isEmpty(end)) {
            wrapper.le("gmt_create",end);
        }

        // 做一个排序 通过时间进行排序
        wrapper.orderByDesc("gmt_create");

        // 调用方法实现条件分页查询
        teacherService.page(pageteacheer,wrapper);

        //拿到总记录数
        long total = pageteacheer.getTotal();// 得到总记录数

        // 通过list 拿到数据的集合
        List<EduTeacher> records=pageteacheer.getRecords();// 数据list集合

// 然后返回这些数据
        return fruit.ok().data("toral",total).data("rows",records);
    }*//*


   // 分析 ：把条件值传到接口中，
    @ApiOperation(value = "分页条件查询讲师列表")
@PostMapping("pageTeacherCondition/{current}/{limit}")
    public fruit pageTeacherCondition(
        @ApiParam(name = "current", value = "当前页码", required = true)
        @PathVariable long current,
        @ApiParam(name = "limit", value = "每页记录数", required = true)
        @PathVariable long limit,
        @ApiParam(name = "teacher", value = "查询对象", required = false)
        @RequestBody(required = false) TeacherQuery teacher){
        // 创建一个 page 对象
        Page<EduTeacher> pageteacher=new Page<>(current,limit);
        // 构建条件
        QueryWrapper<EduTeacher> webPage=new QueryWrapper<>();

        // 多条件组合查询
        // mybatis 动态sql
    // 判断条件值是否为空，如果不为空 拼接条件
    String name=teacher.getName();// 姓名
    Integer level = teacher.getLevel();// 讲师头衔
    String begin = teacher.getBegin();// 开始时间
    String end=teacher.getEnd();// 结束后
    // 通过if 判断条件是否为空， 如果不为空拼接条件
    // 讲师名称
    if(!StringUtils.isEmpty(name)){
        // 构建条件
        webPage.like("name",name);// 字段名称 条件查询
    }
        // 讲师头衔
        if (!StringUtils.isEmpty(level)) {
            // 构建条件
            webPage.eq("level",level);
        }
    // 开始时间
    if(!StringUtils.isEmpty(begin)){
        // 构建条件
        webPage.ge("gmt_create",level);// 字段名称 ，时间
    }
    // 结束时间
    if(!StringUtils.isEmpty(end)){
        // 构建条件
        webPage.le("gmt_create",end);// 字段名称 ，时间
    }


    // 做一个排序 通过时间进行排序
    webPage.orderByDesc("gmt_create");

    // 调用方法实现条件分页查询
   // webPage.page(pageteacher,webPage);

    // 调用方法实现条件分页查询
        teacherService.page(pageteacher, webPage);
        long total=pageteacher.getTotal();// 总记录数
        List<EduTeacher> records=pageteacher.getRecords();// 数据list 集合
        return fruit.ok().data("total",total).data("rows",records);
}

// 5.添加讲师
*/
/*//*
/ 添加讲师的方法接口 先前写的添加功能
@ApiOperation(value = "新增讲师")
@PostMapping("addteacher")
public fruit addTeacher(@RequestBody EduTeacher edyTeacher){// 在浏览器上输入 添加

    // 接收添加的方法
    boolean save = teacherService.save(edyTeacher);

    // 一个判断语句
    if(save){// 添加成功返回一个 fruit.ok()
        return fruit.ok();
    }else {
        // 添加失败返回一个 fruit.error()
        return fruit.error();
    }
}*//*

        @ApiOperation(value = "添加讲师")
        @PostMapping("addTeacher")
        public fruit addTeacher(@RequestBody EduTeacher eduTeacher){
            // 添加接收的方法
            boolean save = teacherService.save(eduTeacher);
            if(save){// 添加成功返回一个 ok
                return fruit.ok();
            }else {// 添加失败 返回一个 error 失败
                return fruit.error();
            }

        }

// 6.根据id查询 讲师信息
// 讲师的修改功能
// 1.先根据id 进行查询功能
// 根据讲师id进行查询
*/
/*@ApiOperation(value = "根据id查询讲师信息")
@GetMapping("geteacher/{id}")
public fruit getTeacher( @ApiParam(name="id" ,value = "讲师id",required = true)  @PathVariable long id){
    EduTeacher byId = teacherService.getById(id);

    return fruit.ok().data("teacher",byId);
}*//*


    @ApiOperation(value = "根据ID查询讲师")
    @GetMapping("getTeacgerid/{id}")
    public fruit getTeacgerid(
            @ApiParam(name = "id", value = "讲师ID", required = true)
            @PathVariable String id){
        EduTeacher byId = teacherService.getById(id);
        return fruit.ok().data("teacher",byId);

    }

// 讲师修改功能
@ApiOperation(value = "修改讲师信息")
    @PostMapping("updateTeacher")
    public fruit updateTeacher(@RequestBody EduTeacher eduTeacher){
        boolean b = teacherService.updateById(eduTeacher);
        if(b){
            return fruit.ok();// 修改成功
        }else {
            return fruit.error();// 修改失败
        }

    }

 */
/*  课件中的方法
  @ApiOperation(value = "根据ID修改讲师")
    @PutMapping("{id}")
    public R updateById(
@ApiParam(name = "id", value = "讲师ID", required = true)
        @PathVariable String id,
@ApiParam(name = "teacher", value = "讲师对象", required = true)
        @RequestBody Teacher teacher){
        teacher.setId(id);
        teacherService.updateById(teacher);
        return R.ok();
    }*//*


}

*/
